package com.xwtec.cor;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: zt
 * @Date: 2021/2/24 21:15
 * 责任链模式
 */
public class Main {

    public static void main(String[] args) {

        Msg msg = new Msg();
        msg.setMsg("大家好(:,<script>我是 mashibing.com,都是996");

   /*     new HtmlFilter().doFilter(msg);
        new SenFilter().doFilter(msg);*/

        FilterChain filterChain = new FilterChain();
        filterChain.add(new HtmlFilter()).add(new SenFilter());

        FilterChain2 filterChain2 = new FilterChain2();
        filterChain2.add(new HaFilter()).add(new WebFilter());

        filterChain.add(filterChain2).doFilter(msg);
        System.out.println(msg);


    }


}

class Msg {
    private String name;
    private String msg;

    public Msg() {
    }

    public Msg(String name, String msg) {
        this.name = name;
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    @Override
    public String toString() {
        return "Msg{" +
                "msg='" + msg + '\'' +
                '}';
    }
}

interface Filter{
    void doFilter(Msg msg);
}

class HtmlFilter implements Filter{

    @Override
    public void doFilter(Msg msg) {
        String s = msg.getMsg();
        s=s.replace("<","[");
        s=s.replace(">","]");
        msg.setMsg(s);
    }
}

class SenFilter implements Filter{

    @Override
    public void doFilter(Msg msg) {
        String s = msg.getMsg();
        s = s.replaceAll("996", "955");
        msg.setMsg(s);
    }
}

class HaFilter implements  Filter{

    @Override
    public void doFilter(Msg msg) {
        String s = msg.getMsg();
        s = s.replace("(:","^v^");
        msg.setMsg(s);

    }
}

class WebFilter implements Filter{

    @Override
    public void doFilter(Msg msg) {
        String s = msg.getMsg();
        s = s.replace("mashibing.com","http://www.mashibing.com");
        msg.setMsg(s);
    }
}

class FilterChain implements Filter{

    List<Filter> list = new ArrayList<Filter>();

    public FilterChain add(Filter f){
        list.add(f);
        return this;

    }


    @Override
    public void doFilter(Msg msg) {
        for (Filter f:
             list) {
            f.doFilter(msg);
        }

    }
}
class FilterChain2 implements Filter{
    List<Filter> list = new ArrayList<Filter>();

    public FilterChain2 add(Filter f){
        list.add(f);
        return this;
    }

    @Override
    public void doFilter(Msg msg) {
        for (Filter f:
                list) {
            f.doFilter(msg);
        }
    }
}

